0x00 目标检测算法的发展

从 Two-Stage 到 One-Stage

0x01 YOLO v1: You Only Look Once!

YOLO(You Only Look Once)是一种基于深度神经网络的物体识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。该算法创造性的将候选区和物体识别这两个阶段合二为一,即看一眼图片(不用看两眼哦)就能知道有哪些对象以及它们的位置。

实际上,YOLO并没有真正去掉候选区,而是采用了预定义的候选区(准确点说应该是预测区,因为并不是Faster RCNN所采用的Anchor)。也就是将图片划分为 7 * 7 = 49 个网格(grid),每个网格允许预测出2个边框(bounding box,包含某个对象的矩形框),总共 49 * 2 = 98 个bounding box。可以理解为98个候选区,它们很粗略的覆盖了图片的整个区域。

RCNN虽然会找到一些候选区,但毕竟只是候选,等真正识别出其中的对象以后,还要对候选区进行微调,使之更接近真实的bounding box。这个过程就是边框回归:将候选区bounding box调整到更接近真实的bounding box。

既然反正最后都是要调整的,干嘛还要先费劲去寻找候选区呢,大致有个区域范围就行了,所以YOLO就这么干了。

不过话说回来,边框回归为啥能起作用,我觉得本质上是因为 分类信息 中已经包含了 位置信息。就像你看到主子的脸和身体,就能推测出耳朵和屁股的位置。

算法步骤

  1. 对每张图像打格(cell):S x S [448 x 448 -> 7 x 7]

    图像中,物体中心落在哪个格子,哪个格子就负责预测那一个物体。

  2. 每个格子预测 B 个 bounding box,同时,给出该预测框的置信度(confidence)

    • Bounding Box: x, y, w, h (center)
    • Confidence: $P_r(object) \ \cdot \ IoU^{truth}_{pred}$
    • Final Output Tensor: $S \times S \times (5*B+C)$

损失函数

0x02 YOLO v2 算法

0x03 YOLO v3 算法

参考文章

DAY1: YOLO 算法

1 检测算法的发展

  • NAS:让计算机自己去学习用哪些网络。

2 One-Stage 检测算法的设计思想

没有了 region proposal 的阶段

3 Yolo v1: 一次伟大的尝试

  • 核心:只有物体的中心落到了这个格子,那么这个格子只用来预测那一个物体。
  • IoU:交并比
  • 损失函数
    • softmax,求导,嵌入了cross entropy 的softmax的求导
  • 优点

    • One stage 确实快
  • 缺点

    • 对拥挤物体检测不好
    • 对小物体检测不好
    • 对 new width-height ratio 物体不好:
    • 没有 BN

DAY2: YOLO v2 算法

1 v2 算法的改进

2 Anchor与损失函数

3 核心代码详解

DAY3: YOLO v3 算法

1 v3 算法的改进

2 框架代码详解

3 如仍有时间的小惊喜